package edu.upc.inmobile.repository.jdbc;



import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;


import java.util.List;

import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.stereotype.*;

import edu.upc.inmobile.domain.AvisoxInmueble;
//import edu.upc.inmobile.domain.Inmueble;
import edu.upc.inmobile.repository.InmuebleRepository;


@Repository
public class JdbcInmuebleRepository implements InmuebleRepository {
	
	private SimpleJdbcTemplate simpleJdbcTemplate;
	
	@Autowired
	public JdbcInmuebleRepository(DataSource dataSource){
		this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
	}
	
	/*public void setDataSource(DataSource ds) {
		// TODO Auto-generated method stub
		
	}*/
	
	/*public List<Inmueble> selectAllxTipo(String CodT) {
		String sql = "select * from T_INMUEBLE where COD_TIPO = " + CodT ;
		
		RowMapper<Inmueble> mapper = new RowMapper<Inmueble>() {  
			 public Inmueble mapRow(ResultSet rs, int rowNum) throws SQLException {
				 String vs_cod = rs.getString("COD_INMUEBLE");
				 String vs_codt = rs.getString("COD_TIPO");
				 String vs_codp = rs.getString("COD_POSTAL");
				 long vl_art = rs.getLong("AREA_TOTAL");
				 long vl_arc = rs.getLong("AREA_CONST");
				 int vi_ndor = rs.getInt("NRO_DORMIT");
				 int vi_nban = rs.getInt("NRO_BANOS");
				 String vs_esi = rs.getString("ES_INDEP");
				 String vs_esa = rs.getString("ES_AMOBLA");
				 String vs_des = rs.getString("DESCRIPCION");
				 int vi_nest = rs.getInt("NRO_ESTACIO");
				 int vi_ana = rs.getInt("ANOS_ANTIG");
				 String vs_esta = rs.getString("ESTADO");
				 Inmueble inmueble = Inmueble.creaInmueble(vs_cod, vs_codt, vs_codp, vl_art, vl_arc, vi_ndor, vi_nban,
						 vs_esi, vs_esa, vs_des, vi_nest, vi_ana, vs_esta);
				 
				 return inmueble;
			 }
		};		
		
		
		return this.simpleJdbcTemplate.getJdbcOperations().query(sql, mapper);
	}*/

	public List<AvisoxInmueble> selectBusqBasica(String TOfer, String CodT, String CostoD, String CostoH, List<String> Ubicacion, int CanDorm, int AnAntig, double AreaT) {
		String TipOfer = "";
		String codigoTipo = "";
		String costD = "";
		String costH ="";
		String Ubica = "";
		String Dorm = "";
		String Antig = "";
		String AreTo = "";
		
		if( TOfer != ""){
			TipOfer = " AND A.TIPO_OFERTA = '" + TOfer + "'" ;
		}
		if( CostoD != ""){
			costD = "AND A.PRECIO_DOL >= " + CostoD ;
		}
		if(CostoH != ""){
			costH = " AND A.PRECIO_DOL <= " + CostoH;
		}
		if(CodT != ""){
			codigoTipo =  " AND I.COD_TIPO = " + CodT;
		}
		if(Ubicacion.size() > 0 ){
			for(int i=0 ; i<= Ubicacion.size()-1; i++){
				Ubica = Ubica + " COD_POSTAL = '" + Ubicacion.get(i) + "' OR " ;
				
			}
			Ubica = " AND (" + Ubica.substring(0, Ubica.length()-4) + ") GROUP BY A.COD_AVISO, I.DESCRIPCION, A.FEC_REGISTRO, A.FEC_VENCIM, A.PRECIO_DOL ORDER BY A.COD_AVISO";
			
		}
		if(CanDorm != 0){
			Dorm =  " AND I.NRO_DORMIT = " + CanDorm;
		}
		if(AnAntig != 0){
			Antig =  " AND I.ANOS_ANTIG = " + AnAntig;
		}
		if(AreaT != 0){
			AreTo =  " AND I.AREA_TOTAL = " + AreaT;
		}
		String sql = "SELECT A.COD_AVISO, I.DESCRIPCION, A.FEC_REGISTRO, A.FEC_VENCIM, A.PRECIO_DOL FROM T_AVISO A INNER JOIN T_INMUEBLE I " +
				"ON I.COD_INMUEBLE=A.COD_INMUEBLE"  + codigoTipo + TipOfer  + costD + costH + Dorm + Antig + AreTo + Ubica ;
		
		RowMapper<AvisoxInmueble> mapper = new RowMapper<AvisoxInmueble>() {  
			 public AvisoxInmueble mapRow(ResultSet rs, int rowNum) throws SQLException {
				 
				 String vs_codav = rs.getString("COD_AVISO");
				 String vs_desc = rs.getString("DESCRIPCION");
				 Date vd_fecreg = rs.getDate("FEC_REGISTRO"); 
				 Date vd_fecven = rs.getDate("FEC_VENCIM");
				 Long vl_prec = rs.getLong("PRECIO_DOL");
				 
				 
				 AvisoxInmueble avisoXinmueble = AvisoxInmueble.creaAvisoxInmueble(vs_codav, vs_desc, vl_prec, vd_fecreg, vd_fecven);
				 return avisoXinmueble;
			 }
		};		
			
		return this.simpleJdbcTemplate.getJdbcOperations().query(sql, mapper);
	
	}

	

		
}
